#ifndef SERIALPORTSERVICE_H
#define SERIALPORTSERVICE_H
#include <BinaryFileUtil.h>
#include <QDebug>
#include <QMutex>
#include <QQueue>
#include <QTimer>
#include <SerialPortUtils.h>

#include <model/datapacket.h>

///串口服务
class SerialPortService:public QObject
{
    Q_OBJECT
public:
    explicit SerialPortService(QObject *parent = nullptr);
    ~SerialPortService();
    //窗口初始化
    SerialPortUtils *serialPortUtils = nullptr;
    //BinaryFileUtil *fileUtil  = nullptr;
    //串口连接
    void connectToPort(const QString &portName = "", int baudRate = 9600 , const bool isAuto = true) {
        if (serialPortUtils) {
            serialPortUtils->connectToPort(portName, baudRate, isAuto);
        }
    }
    //断开连接
    void disconnectPort() {
        if (serialPortUtils) {
            serialPortUtils->disconnectPort();
        }
        // 停止线程
        stopWork();
    }            // 线程运行标志
    void startWork(); // 启动数据处理线程
    void stopWork(); // 停止数据处理线程
    //是否连接
    bool isConnected() const {
        if (serialPortUtils) {
            return serialPortUtils->isConnected();
        }
        return false;
    }
    void setTest(const bool isTest){
        this->isTest = isTest;
    }

//信号函数
signals:
    // 串口连接状态回调
    void connectionStatusChanged(const ConnectionStatus status, const QString &message = "");
    // 接收到串口数据回调
    void dataReceived(const DataPacket &data);

public  slots:
    void displayReceivedData(const QByteArray &data);
    void updateConnectionStatus(const ConnectionStatus status, const QString &message = "");
    //缓存QByteArray 数据
private:
    QByteArray m_buffer ;           // 原始数据缓冲区
    QQueue<QByteArray> m_datas;    // 存储完整数据的队列
    QMutex m_mutex;                // 线程安全锁
    QTimer *m_processThread = nullptr;      // 数据处理线程

    bool m_running = false;

    bool isTest = false; //测试模式下
    // 处理数据的线程函数
    void processData();
    //初始化一个字符串数据包
    QList<QString> res = {"波形未见异常",
                          "波形疑似心跳稍快请注意休息",
                          "波形疑似心跳过快请注意休息",
                          "波形疑似阵发性心跳过快请咨询医生",
                          "波形疑似心跳稍缓请注意休息",
                          "波形疑似心跳过缓请注意休息",
                          "波形疑似偶发心跳间期缩短请咨询医生;",
                          "波形疑似心跳间期不规则请咨询医生;",
                          "波形疑似心跳稍快伴有偶发心跳间期缩短请咨询医生;",
                          "波形疑似心跳稍缓伴有偶发心跳间期缩短请咨询医生;",
                          "波形疑似心跳稍缓伴有心跳间期不规则请咨询医生;",
                          "波形有漂移请重新测量;",
        "波形疑似心跳过快伴有波形漂移请咨询医生;",
        "波形疑似心跳过缓伴有波形漂移请咨询医生;",
        "波形疑似偶发心跳间期缩短伴有波形漂移请咨询医生",
        "波形疑似心跳间期不规则伴有波形漂移请咨询医生;",
        "信号较差请重新测量;"


    };
};

#endif // SERIALPORTSERVICE_H
